package com.cn.utils;
import com.cn.pojo.SysMenu;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * 功能描述: <br>
 *
 * @program: xg-prant
 * @description: 构建树形菜单的工具类
 * @author: Mr.TYJ
 * @create: 2022-03-03 16:17
 **/
public class MenuTreeBuilder {

    public static List<SysMenu> build(List<SysMenu> menus){
        //2.查看一下有没有获取到菜单
        menus.forEach(menu -> {
            System.out.println(menu.toString());
        });
        //3.定义一个最后的结果来存储菜单树
        List<SysMenu> menuList=new ArrayList<>();
        //4.先查询一级菜单
        for (SysMenu menu :menus){
            //如果getParentId是0则是父级菜单
            if (menu.getParentId()==0){
                //将父级菜单添加到menuList中
                menuList.add(menu);
            }
        }
        //对一级菜单排序
        Collections.sort(menus,SysMenu.order());

        //5.为一级菜单设置子菜单
        for (SysMenu menu: menuList
        ) {
            //这里需要通过递归的方法去设置子菜单(因为子菜单里可能还有子菜单)
            menu.setChildMenus(getChild(menu.getId(),menus));
        }
        return menuList;
    }

    /**
     * 递归获取子菜单
     * @param id 父级id
     * @param menus 所有菜单列表
     * @return
     */
    private static List<SysMenu> getChild(Long id, List<SysMenu> menus) {
        //子菜单
        List<SysMenu> childList=new ArrayList<>();
        //1.如何判断一个菜单是另一个菜单的子菜单
        //1.该菜单的父级id必须是穿过来的id，不能是按钮
        for (SysMenu menu: menus
        ) {
            //如果满足两个条件则就是子菜单的id
            if (menu.getParentId().equals(id)&&menu.getType().equals("1")){
                childList.add(menu);
            }
        }

        //这里设置二级以上的菜单，（最多是三级菜单）
        for (SysMenu menu: childList
        ) {
            menu.setChildMenus(getChild(menu.getId(),menus));
        }
        //对子集菜单排序
        Collections.sort(childList,SysMenu.order());



        return childList;
    }

//    /**
//     * 递归三级菜单
//     * @param id
//     * @param menus
//     * @return
//     */
//    private static List<SysMenu> getChildTwo(Long id, List<SysMenu> menus) {
//        //子菜单
//        List<SysMenu> childList=new ArrayList<>();
//        //1.如何判断一个菜单是另一个菜单的子菜单
//        //1.该菜单的父级id必须是穿过来的id，不能是按钮
//        for (SysMenu menu: menus
//        ) {
//            //如果满足两个条件则就是子菜单的id
//            if (menu.getParentId().equals(id)&&menu.getType().equals("1")){
//                childList.add(menu);
//            }
//        }
//
//        //这里设置三级菜单，（最多是三级菜单）
//        for (SysMenu menu: childList
//        ) {
//            menu.setChildMenus(getChildTwo(menu.getId(),menus));
//        }
//        //对子集菜单排序
//        Collections.sort(childList,SysMenu.order());
//
//        //判断递归结束的条件
//
//        if (childList.size() == 0){
//            return null;
//        }
//        return childList;
//    }

}
